package de.bht.fb6.mobisand.avoidlist.view;

import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.List;

import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.CheckBox;
import android.widget.ImageView;
import android.widget.TextView;
import de.bht.fb6.mobisand.avoidlist.R;
import de.bht.fb6.mobisand.avoidlist.model.ToAvoid;

/**
 * Implementierung eines ArrayAdapter speziell für unsere ToAvoid.
 * 
 * @author Bruno Kirschner, Mario Dörwald
 * @since 07. Jan. 2013
 */
public class ToAvoidArrayAdapter extends ArrayAdapter<ToAvoid>{

	/////////////////// Attribute ////////////////////////////////////////////////////
	
	/** Context in dem das Objekt verwendet wird. **/ 
	private Context ctx;
	
	/** Layout, dass für die Items verwendet werden soll **/ 
	private int ressourceID;
	
	/** Liste der Objekte im Array **/
	private List<ToAvoid> objects;
	
	/////////////////// Konstruktor //////////////////////////////////////////////////
	
	/**
	 * Konstruktor mit den wichtigsten Informationen
	 * 
	 * @param context
	 * 	context in dem der Adapter arbeiten soll
	 * @param textViewResourceId
	 * 	layout, dass für die Items verwendet werden soll
	 * @param objects
	 * 	objekte die zu listitems konvertiert werden sollen
	 */
	public ToAvoidArrayAdapter(Context context, int textViewResourceId,
			List<ToAvoid> objects) {
		super(context, textViewResourceId, objects);
		
		this.ctx = context;
		this.ressourceID = textViewResourceId;
		this.objects = objects;
	}
	
	/////////////////// Overriden Method ////////////////////////////////////////////////////
	
	/**
	 * Wird für jedes einzelne Item das im Konstruktor übergeben wurde einmal aufgerufen
	 */
	@Override
	public View getView (int position, View convertView, ViewGroup parent) {
		
		View row = convertView;
		
		/** Wandelt das XML-Layout in ein Objekt um **/
		LayoutInflater inflater = (LayoutInflater) this.ctx.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
		row = inflater.inflate(this.ressourceID, parent, false);

		/** Hohlt das aktuelle Item **/
		ToAvoid item = this.objects.get(position);
		
		/** Itemdaten in die View überführen **/
		
		/** Checkbox aus dem Layout wird mit dem item.isAvoided() gefüllt **/
		CheckBox box = (CheckBox) row.findViewById(R.id.checkBox1);
		box.setChecked(item.isAvoided());
		
		/** TextView1 aus dem Layout wird mit dem Namen gefüllt **/
		TextView title = (TextView) row.findViewById(R.id.textView1);
		title.setText(item.getName());
		
		/** TextView2 aus dem Layout bird mit dem Datum gefüllt **/
		TextView subtitle = (TextView) row.findViewById(R.id.textView2);
		// #ToDo sollte irgendwo als allgemeingültiges Format gespeichert werden
		DateFormat df = SimpleDateFormat.getDateTimeInstance();
		subtitle.setText(df.format(item.getAvoidanceDate()));
		
		/** ImageView alpha wird mit der item.Importance gefüllt **/
		ImageView importance = (ImageView) row.findViewById(R.id.imageView1);
		importance.setAlpha(item.getImportance());
		
		/** Gibt die View für das Item zurück **/
		return row;
	}
}
